package interval;

import java.util.ArrayList;
import java.util.List;

/**
 * @author pengfei.hpf
 * @date 2020/3/7
 * @verdion 1.0.0
 * 986. 区间列表的交集
 * 给定两个由一些闭区间组成的列表，每个区间列表都是成对不相交的，并且已经排序。
 *
 * 返回这两个区间列表的交集。
 *
 * （形式上，闭区间 [a, b]（其中 a <= b）表示实数 x 的集合，而 a <= x <= b。两个闭区间的交集是一组实数，要么为空集，要么为闭区间。例如，[1, 3] 和 [2, 4] 的交集为 [2, 3]。）
 *
 *
 *
 * 示例：
 *
 *
 *
 * 输入：A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
 * 输出：[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
 * 注意：输入和所需的输出都是区间对象组成的列表，而不是数组或列表。
 *
 *
 * 提示：
 *
 * 0 <= A.length < 1000
 * 0 <= B.length < 1000
 * 0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9
 */
public class IntervalIntersection {
    public int[][] intervalIntersection(int[][] A, int[][] B) {
        if(A == null || B == null || A.length == 0 || B.length == 0){
            return new int[0][0];
        }
        List<int[]> list = new ArrayList<>();

        int a = 0;
        int b = 0;
        while(a < A.length &&  b < B.length){
            if(A[a][1] >= B[b][0] && B[b][1] >= A[a][0]){
                list.add(new int[]{Math.max(A[a][0], B[b][0]), Math.min(A[a][1], B[b][1])});
            }
            if(A[a][1] < B[b][1]){
                a ++;
            } else {
                b ++;
            }
        }
        return list.toArray(new int[list.size()][]);
    }
}
